package systemFunc

import (
	"fmt"
	"strconv"
	"strings"
)

func StringFunc() {
	// 长度函数
	str := "hello北" // utf-8编码，中文占三个字节
	fmt.Printf("len(%s) = %v\n", str, len(str))

	// 遍历字符串 str[i]是按照字节遍历，多个字节的字符会被截断
	str = "welcome北京"
	for i := 0; i < len(str); i++ {
		fmt.Printf("第%d个字符是%c\n", i+1, str[i])
	}
	fmt.Println("--------分隔符---------")
	slice1 := []rune(str)
	for i := 0; i < len(slice1); i++ {
		fmt.Printf("第%d个字符是%c\n", i+1, slice1[i])
	}
	fmt.Println("--------分隔符---------")

	// 字符串转数字
	i, _ := strconv.Atoi("1234")
	fmt.Printf("%v属于%T类型\n", i, i)

	// 整数转字符串
	res := strconv.Itoa(4567)
	fmt.Printf("%s属于%T类型\n", res, res)

	// string转[]byte
	var bytes = []byte("hello go")
	fmt.Printf("bytes = %v\n", bytes)

	//byte转string
	s := string([]byte{97, 98, 99})
	fmt.Printf("s = %v\n", s)

	// string的进制转换
	s2 := strconv.FormatInt(9, 2)
	fmt.Printf("s2: %v\n", s2)

	// 包含子串
	b := strings.Contains("abcd", "bc")
	fmt.Printf("b: %v\n", b)

	// 统计子串个数
	i2 := strings.Count("abcdabcdabc", "abcd")
	fmt.Printf("i2: %v\n", i2)

	// 判断字符串相等。不区分大小写。 ==区分大小写
	b2 := strings.EqualFold("Abc", "aBC")
	fmt.Printf("Abc与aBC相等: %v\n", b2)

	// 子串第一次出现的位置
	i3 := strings.Index("abcdeabcd", "de")
	fmt.Printf("i3: %v\n", i3)

	// 子串最后一次出现的位置
	i4 := strings.LastIndex("abcdeab", "ab")
	fmt.Printf("i4: %v\n", i4)

	// 用指定字符串替换。最后参数代表替换次数，-1代表全部替换
	s3 := strings.Replace("zhengyongzhen shi zhengyongzhen", "en", "EN", -1)
	fmt.Printf("s3: %v\n", s3)

	// 分割字符串
	s4 := strings.Split("zheng;yong;zhen;", ";")
	for i := 0; i < len(s4); i++ {
		fmt.Printf("%s\t", s4[i])
	}
	fmt.Println()

	// 转大小写
	s5 := strings.ToLower("AbCdEf")
	s6 := strings.ToUpper("AbCdEf")
	fmt.Printf("s5: %v\n", s5)
	fmt.Printf("s6: %v\n", s6)

	// 去掉首尾空格
	s7 := strings.TrimSpace("  aaa b cc dd   ")
	fmt.Printf("s7: %v\n", s7)

	// 指定去掉左右两端的某子串。只能去两端，而且是全部
	s8 := strings.Trim("!!!abc is abc!!", "!")
	fmt.Printf("s8: %v\n", s8)

	// 指定去掉某一端的某子串
	s9 := strings.TrimLeft("!!!abc is abc!!", "!")
	fmt.Printf("s9: %v\n", s9)
	s10 := strings.TrimRight("!!!abc is abc!!", "!")
	fmt.Printf("s10: %v\n", s10)

	// 字符串是否以xxx开头或结尾
	b3 := strings.HasPrefix("https://wwww.baidu.com", "https")
	fmt.Printf("b3: %v\n", b3)
	b4 := strings.HasSuffix("https://wwww.baidu.com", ".com")
	fmt.Printf("b4: %v\n", b4)
}
